package factura.beans;

import java.math.*;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import factura.dao.HibernateUtilDAO;
import factura.modelo.Claves;
import factura.modelo.Clientes;
import factura.modelo.Comprobante;
import factura.modelo.Emisor;
import factura.modelo.InfoTributaria;
import factura.modelo.xml.Factura;
import factura.modelo.xml.FacturaModel;
import factura.modelo.xml.ObjectFactory;
import factura.util.FormGenerales;
import factura.util.IdentificacionComprobante;
import factura.util.TipoComprobanteEnum;

@ManagedBean
@SessionScoped
public class FacturaBean {
	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
	private String CONSUMIDORFINAL="Recuerde que a partir de $200 no se puede emitir una factura como Consumidor Final"; 

	private long VALOR_MAXIMO_CONSUMIDOR_FINAL = 200L;
	private Long secuencial = null;
	private String secuencialComprobante = null;
	private String razonSocialComprador = null;
	private String identificacionComprador = null;
	private InfoTributaria infoTributaria = null;
	private Factura.InfoFactura infoFactura = null;
	private Emisor emisor = null;
	private String serie = null;
	private String claveDeAcceso = null;
	private Date fechaEmision = new Date();
	private BigDecimal subtotal12 = BigDecimal.ZERO;
	private BigDecimal subtotal0 = BigDecimal.ZERO;
	private BigDecimal subtotalNoObjetoIVA = BigDecimal.ZERO;
	private BigDecimal subtotalExentoIVA = BigDecimal.ZERO;
	private BigDecimal subtotalValorICE = BigDecimal.ZERO;
	private BigDecimal subtotalValorIRBPNR = BigDecimal.ZERO;
	private BigDecimal subtotalSinImpuestos = BigDecimal.ZERO;
	private BigDecimal valorIVA = BigDecimal.ZERO;
	private BigDecimal valorPropina = BigDecimal.ZERO;
	private BigDecimal valorDescuento = BigDecimal.ZERO;
	private BigDecimal totalValorFactura = BigDecimal.ZERO;
	private Clientes clienteSeleccionado;
	private Claves claveContingencia = new Claves();
	private FacturaModel modeloDetalle;
	private ObjectFactory facturaFactory = null;
	private String password = null;
	private IdentificacionComprobante idenComprob = new IdentificacionComprobante();

	public void actualizaClaveDeAcceso() {
		this.claveDeAcceso = null;
		llenaDatosEmisor();

		Comprobante comprobante = null;
		try {
			comprobante = (Comprobante) HibernateUtilDAO.findAll("Comprobante")
					.get(0);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.secuencial = Long.valueOf(comprobante.getSecuencial());

		this.secuencialComprobante = String.format("%09d",
				new Object[] { Long.valueOf(this.secuencial.longValue()) });
		this.idenComprob.setLblEstablecimiento(this.emisor
				.getCodestablecimiento());
		this.idenComprob.setLblPunto(this.emisor.getCodpuntoemision());
		this.idenComprob.setLblNumeroComprobante(this.secuencialComprobante);
		this.claveContingencia = new FormGenerales().obtieneClaveDeAcceso(
				this.secuencialComprobante, this.emisor, this.serie,
				this.claveDeAcceso, this.fechaEmision,
				TipoComprobanteEnum.FACTURA.getCode());
		if ((this.claveContingencia.getCodigocomprobante() != null)
				&& (!this.claveContingencia.getCodigocomprobante().isEmpty())) {
			this.idenComprob.setLblClaveAcceso(this.claveContingencia
					.getCodigocomprobante());
			setDate(new Date());
		}
	}
	
	 public void setDate(Date date)
   {
	    String dateString = "";
	    date = FormGenerales.eliminaHora(date);
	     if ((date != null) && ((date.equals(new Date())) || (date.before(new Date()))))
	    {
	      dateString = this.dateFormat.format(date);
	      this.idenComprob.setTextFechaEmision(dateString);
	      this.fechaEmision = date;
	   }
	     
	   }

	public IdentificacionComprobante getIdenComprob() {
		return idenComprob;
	}

	public void setIdenComprob(IdentificacionComprobante idenComprob) {
		this.idenComprob = idenComprob;
	}

	public void llenaDatosEmisor() {
		try {
			emisor = (Emisor) HibernateUtilDAO.findAll("Emisor").get(0);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public String getClaveDeAcceso() {
		return claveDeAcceso;
	}

	public void setClaveDeAcceso(String claveDeAcceso) {
		this.claveDeAcceso = claveDeAcceso;
	}

	public FacturaBean() {
		super();
		actualizaClaveDeAcceso();
	}

	public String getCONSUMIDORFINAL() {
		return CONSUMIDORFINAL;
	}

	public void setCONSUMIDORFINAL(String cONSUMIDORFINAL) {
		CONSUMIDORFINAL = cONSUMIDORFINAL;
	}
	


}
